import js from '@eslint/js'
import globals from 'globals'
import tseslint from 'typescript-eslint'
import pluginVue from 'eslint-plugin-vue'
import { defineConfig } from 'eslint/config'
import prettierRecommended from 'eslint-plugin-prettier/recommended'
import { createRequire } from 'module'
const require = createRequire(import.meta.url)
const autoImport = require('./.eslintrc-auto-import.json')

export default defineConfig([
  {
    files: ['**/*.{js,mjs,cjs,ts,mts,cts,vue}'],
    plugins: { js },
    extends: ['js/recommended']
  },
  {
    files: ['**/*.{js,mjs,cjs,ts,mts,cts,vue}'],
    languageOptions: {
      globals: {
        ...globals.browser,
        ...globals.node,
        ...autoImport.globals
      }
    }
  },
  tseslint.configs.recommended,
  pluginVue.configs['flat/essential'],
  {
    files: ['**/*.vue'],
    languageOptions: {
      parserOptions: {
        parser: tseslint.parser
      }
    }
  },
  {
    rules: {
      'prettier/prettier': 'error', // 强制使用 Prettier 格式化代码
      'no-useless-escape': 0, // 关闭无用转义检查
      'no-undef': 0, // 关闭未定义变量检查
      '@typescript-eslint/no-unused-expressions': 0, // 关闭 TypeScript 表达式未使用检查
      '@typescript-eslint/no-unsafe-function-type': 0, // 关闭 TypeScript 不安全函数类型检查
      'vue/no-setup-props-destructure': 0, // 关闭 Vue setup 中 props 解构检查
      'vue/no-reserved-component-names': 0, // 关闭 Vue 组件名称保留字检查
      '@typescript-eslint/ban-ts-ignore': 0, // 关闭 TypeScript 禁止 ts-ignore 指令
      '@typescript-eslint/explicit-function-return-type': 0, // 关闭 TypeScript 函数返回类型明确指定检查
      '@typescript-eslint/no-explicit-any': 0, // 关闭 TypeScript 使用 any 类型检查
      '@typescript-eslint/no-var-requires': 0, // 关闭 TypeScript var-requires 检查
      '@typescript-eslint/no-empty-function': 0, // 关闭 TypeScript 空函数检查
      'vue/custom-event-name-casing': 0, // 关闭 Vue 自定义事件名称格式检查
      'no-use-before-define': 0, // 关闭变量使用前定义检查
      '@typescript-eslint/no-use-before-define': 0, // 关闭 TypeScript 变量使用前定义检查
      '@typescript-eslint/ban-ts-comment': 0, // 关闭 TypeScript ts-comment 检查
      '@typescript-eslint/ban-types': 0, // 关闭 TypeScript 禁止使用特定类型检查
      '@typescript-eslint/no-non-null-assertion': 0, // 关闭 TypeScript 非空断言检查
      '@typescript-eslint/explicit-module-boundary-types': 0, // 关闭 TypeScript 明确模块边界类型检查
      '@typescript-eslint/no-unused-vars': 0, // 关闭 TypeScript 未使用的变量检查
      'no-unused-vars': 0, // 关闭未使用的变量检查
      // 开启 Vue HTML 自闭合标签检查
      'vue/html-self-closing': [
        1,
        {
          html: {
            void: 'always',
            normal: 'never',
            component: 'always'
          },
          svg: 'always',
          math: 'always'
        }
      ],
      'vue/multi-word-component-names': 0, // 关闭 Vue 组件名称多词检查
      'vue/no-v-html': 0, // 关闭 Vue v-html 指令检查
      'vue/require-toggle-inside-transition': 0 // 关闭 Vue 过渡内部切换要求检查
    }
  },
  prettierRecommended // 集成 Prettier 规则
])
